package com.yc.hrd.core;

/**
 * 地图
 */

public class Map {

	// Map has Item
	private Item[] items = new Item[10];

	private int[][] map = new int[5][4];

	public Map() {
		int[][] itemArray = {{0, 0, 1, 1, 2},
				{1, 0, 7, 2, 2},
				{3, 0, 2, 1, 2},
				{0, 2, 3, 1, 2},
				{1, 2, 6, 2, 1},
				{1, 3, 5, 1, 1},
				{2, 3, 5, 1, 1},
				{3, 2, 4, 1, 2},
				{0, 4, 5, 1, 1},
				{3, 4, 5, 1, 1}};
		
		for (int i = 0; i < itemArray.length; i++) {
			items[i] = new Item(
					itemArray[i][0], 
					itemArray[i][1], 
					itemArray[i][2], 
					itemArray[i][3], 
					itemArray[i][4]);
		}
	}

	public void print() {
		// 清空地图
		for(int y = 0; y < map.length; y++) {
			for(int x = 0; x<map[y].length; x++) {
				map[y][x] = 0;
			}
		}
		// 根据板块设置地图
		for (Item item : items) {
			//设置数字
			for (int y = item.getY(); y < item.getY() + item.getHeight(); y++) {
				for (int x = item.getX(); x < item.getX() + item.getWidth(); x++) {
					map[y][x] = item.getNum();
				}
			}

		}
		// 打印地图
		for(int y = 0; y < map.length; y++) {
			for(int x = 0; x<map[y].length; x++) {
				System.out.print( map[y][x] + " ");
			}
			System.out.println();
		}
		
	}
	
	// 向下移动一个板块
	public boolean down(Item item) {
		
		// 判断1. 移动之后判断是否越过边界
		if ( item.getY() + item.getHeight() == 5) {
			return false;
		}
		
		
		// 判断2. 判断板块下面是否都是0
		int newy = item.getY() + item.getHeight();
		for(int newx = item.getX(); newx < item.getX() + item.getWidth(); newx ++) {
			if(map[newy][newx] != 0) {
				return false;
			}
		}
		
		// 向下移动
		item.move(0, 1);
		return true;
	}
	
	/**
	 * 根据坐标找板块
	 * @param x
	 * @param y
	 * @return
	 */
	public Item find(int x, int y) {
		for(Item item : items) {
			if(item.getX()==x && item.getY()==y) {
				return item;
			}
		}
		return null;
	}
	
	public Item[] getItems() {
		return items;
	}

	public static void main(String[] args) {
		Map map = new Map();
		map.print();

		// 移动小兵
		Item item = map.find(2, 3);
		map.down(item);
		System.out.println("-------------------------");
		map.print();
		
		// 移动最左边的小兵
		item = map.find(1, 3);
		map.down(item);
		System.out.println("-------------------------");
		map.print();
		
		// 移动关羽
		item = map.find(1, 2);
		map.down(item);
		System.out.println("-------------------------");
		map.print();
		
		// 移动关羽
		item = map.find(1, 3);
		map.down(item);
		System.out.println("-------------------------");
		map.print();
		
		
		
	}

}
